/**
 * 暗色材质修复工具
 * 专门修复暗色贴图导致的透明区域显示黑色问题
 */

// 立即修复所有暗色透明材质
const scene = window.manager?.getCurrentScene()?.scene;
if (scene) {
    console.log('\n🔧 修复所有暗色透明材质...\n');
    
    let fixedCount = 0;
    
    scene.traverse((obj) => {
        if (obj.isMesh && obj.material) {
            const materials = Array.isArray(obj.material) ? obj.material : [obj.material];
            
            materials.forEach((mat, index) => {
                const matName = (mat.userData?.materialName || mat.name || '').toLowerCase();
                const meshName = (obj.name || '').toLowerCase();
                
                // 检查是否为透明材质
                const isTransparent = mat.transparent || mat.alphaTest > 0 || mat.opacity < 1;
                
                if (isTransparent) {
                    // 检查颜色是否过暗
                    const isDark = mat.color.r < 0.5 && mat.color.g < 0.5 && mat.color.b < 0.5;
                    
                    if (isDark) {
                        console.log(`🔧 修复暗色透明材质: ${obj.name} - ${mat.userData?.materialName || mat.name}`);
                        console.log(`   修复前: RGB(${mat.color.r.toFixed(3)}, ${mat.color.g.toFixed(3)}, ${mat.color.b.toFixed(3)})`);
                        
                        // 计算补偿系数
                        const avgColor = (mat.color.r + mat.color.g + mat.color.b) / 3;
                        const compensation = Math.min(2.0, 0.8 / Math.max(avgColor, 0.01));
                        
                        // 应用补偿
                        const newR = Math.min(1.0, mat.color.r * compensation);
                        const newG = Math.min(1.0, mat.color.g * compensation);
                        const newB = Math.min(1.0, mat.color.b * compensation);
                        
                        mat.color.setRGB(newR, newG, newB);
                        
                        // 确保正确的透明设置
                        const isRoadLine = matName.includes('马路') || matName.includes('线') || 
                                         meshName.includes('马路') || meshName.includes('线');
                        
                        if (isRoadLine) {
                            mat.transparent = false;
                            mat.alphaTest = 0.5;
                            mat.depthWrite = true;
                            obj.renderOrder = 100;
                        } else {
                            mat.transparent = true;
                            mat.alphaTest = 0;
                            mat.depthWrite = false;
                            obj.renderOrder = 999;
                        }
                        
                        mat.needsUpdate = true;
                        
                        console.log(`   修复后: RGB(${mat.color.r.toFixed(3)}, ${mat.color.g.toFixed(3)}, ${mat.color.b.toFixed(3)}) (补偿系数: ${compensation.toFixed(2)})`);
                        fixedCount++;
                    }
                }
            });
        }
    });
    
    console.log(`\n✅ 修复完成！共修复 ${fixedCount} 个暗色透明材质`);
    
    if (fixedCount > 0) {
        console.log(`\n🎯 现在透明区域应该不再显示黑色了！`);
        console.log(`如果效果满意，请重新上传模型以从源头解决问题。`);
    }
} else {
    console.error('❌ 场景未加载');
}

// 暴露修复函数到全局
window.fixDarkMaterials = () => {
    // 重新运行上面的代码
    eval(document.querySelector('script[data-dark-material-fixer]')?.textContent || '');
};

console.log('\n💡 提示：如果需要重新运行修复，可以执行 fixDarkMaterials()');
